package com.zeta.demo.es.service.es;

import com.zeta.demo.es.common.param.EsPageParam;
import com.zeta.demo.es.model.document.PostDocument;
import com.zeta.demo.es.model.entity.Post;
import com.zeta.demo.es.model.query.PostQueryDTO;
import org.zetaframework.base.result.PageResult;

import java.util.List;

/**
 * 文章 ElasticSearch服务类
 *
 * @author gcc
 */
public interface IPostEsService {

    /**
     * 分页查询
     *
     * @param param 分页参数
     * @return 分页结果
     */
    PageResult<PostDocument> page(EsPageParam<PostQueryDTO> param);

    /**
     * 根据id查文章
     *
     * @param id 文章ID
     * @return 文章数据，可能为null
     */
    PostDocument getById(Long id);

    /**
     * 根据标题搜索文章(分词查询)
     *
     * @param title 标题
     * @return 文章数据列表
     */
    List<PostDocument> searchByTitle(String title);

    /**
     * 根据标题搜索文章(精确查询)
     *
     * @param keyword 关键字
     * @return 文章数据列表
     */
    List<PostDocument> searchByTitleKeyword(String keyword);

    /**
     * 根据内容搜索文章(高亮查询)
     *
     * @param content 文章内容
     * @return 搜索结果
     */
    List<String> searchByContentWithHighLight(String content);

    /**
     * 保存或修改文章
     *
     * @param post 文章数据
     * @return 是否成功
     */
    boolean saveOrUpdatePost(Post post);

    /**
     * 删除文章
     *
     * @param id 文章ID
     * @return 是否成功
     */
    boolean removeById(Long id);

    /**
     * 批量删除文章
     *
     * @param ids 文章ID列表
     * @return 是否成功
     */
    boolean removeByIds(List<Long> ids);
}
